﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AcademiaDAO;
using AcademiaEntidades;
using System.Web.Security;

public partial class Administracion_Alumno : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Para controlar el botan para atras del navegador
        if (Session["Usuario"] == null)
            Response.Redirect("~/Publico/Login.aspx");
        if (!IsPostBack)
        {
            // Se ocultan los paneles
            panelDatosAlumno.Visible = false;
            panelAltaAlumno.Visible = false;
            ViewState["Orden"] = "Nombre";

            CargarTiposDocumento();
            cargarSesion();//Cargar los datos de session
        }
    }
    private void cargarSesion()
    {
        lblUsuarioLogueado.Text = ((Usuarios)Session["Usuario"]).Usuario;
        lblRolLogueado.Text = ((Usuarios)Session["Usuario"]).Rol;
    }

    protected void btnVolverBus_Click(object sender, EventArgs e)
    {
        // Vuelve a la página de inicio de administración
        Response.Redirect("~/Administracion/Administracion.aspx");
    }

    private void LimpiarBuscar()
    {
        txtNombreBus.Text = string.Empty;
        txtApellidoBus.Text = string.Empty;
        txtLegajoBus.Text = string.Empty;
        txtFechaDesdeBus.Text = string.Empty;
        txtFechaHastaBus.Text = string.Empty;
    }

    private void LimpiarAlta()
    {
        txtLegajoAlta.Text = string.Empty;
        txtNombreAlta.Text = string.Empty;
        txtApellidoAlta.Text = string.Empty;
        txtNroDocAlta.Text = string.Empty;
        txtTelAlta.Text = string.Empty;
        ddlTipoDocAlta.SelectedIndex = 0;
        txtFechaInscAlta.Text = DateTime.Today.ToString("dd/MM/yyyy");
        txtNombreAlta.Focus();
        ViewState["Alumno"] = null;
        btnEliminar.OnClientClick = string.Empty;
    }

    protected void btnLimpiar_Click(object sender, EventArgs e)
    {
        LimpiarBuscar();
        lblResultadoBus.Text = string.Empty;
        panelDatosAlumno.Visible = false;
    }

    protected void btnLimpiarAlta_Click(object sender, EventArgs e)
    {
        LimpiarAlta();
    }

    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        Buscar();
    }

    private void Buscar()
    {
        // Se obtienen los string de los campos de la búsqueda
        string strNombre = txtNombreBus.Text.Trim();
        string strApellido = txtApellidoBus.Text.Trim();
        string strLegajo = txtLegajoBus.Text.Trim();
        string strDesde = txtFechaDesdeBus.Text.Trim();
        string strHasta = txtFechaHastaBus.Text.Trim();

        int? legajo = null;

        int auxLegajo = -1; // auxiliar
        if (int.TryParse(strLegajo, out auxLegajo))
        {
            legajo = auxLegajo;
        }

        DateTime? fechaDesde = null;
        DateTime auxDesde;
        if (!string.IsNullOrEmpty(strDesde) && DateTime.TryParse(strDesde, out auxDesde))
        {
            fechaDesde = auxDesde;
        }

        DateTime? fechaHasta = null;
        DateTime auxHasta;
        if (!string.IsNullOrEmpty(strHasta) && DateTime.TryParse(strHasta, out auxHasta))
        {
            fechaHasta = auxHasta;
        }

        CargarGrillaFiltro(strNombre, strApellido, legajo, fechaDesde, fechaHasta);

        panelDatosAlumno.Visible = true;
    }

    private void CargarGrilla(List<Alumno> alumnos)
    {
        try
        {
            string orden = ViewState["Orden"].ToString();
            if (alumnos != null)
            {
                grillaAlumnos.DataSource = alumnos;
            }
            else
            {
                grillaAlumnos.DataSource = AlumnoDAO.ObtenerTodos(orden, null, null, null, null, null);
            }
            grillaAlumnos.DataKeyNames = new string[] { "IdAlumno" };
            grillaAlumnos.DataBind();

            if (grillaAlumnos.Rows.Count == 0)
            {
                lblResultadoMostrar.ForeColor = lblNombreBus.ForeColor;
                lblResultadoMostrar.Text = "No se encontraron registros";
            }
        }
        catch (Exception ex)
        {
            lblResultadoBus.Text = ex.Message;
        }
    }

    private void CargarGrillaFiltro(string nombre, string apellido, int? legajo, DateTime? fechaDesde, DateTime? fechaHasta)
    {
        try
        {
            string orden = ViewState["Orden"].ToString();
            List<Alumno> alumnos = AlumnoDAO.ObtenerTodos(orden, nombre, apellido, legajo, fechaDesde, fechaHasta);
            CargarGrilla(alumnos);
        }
        catch (Exception ex)
        {
            lblResultadoBus.Text = ex.Message;
        }
    }

    protected void btnAgregar_Click(object sender, EventArgs e)
    {
        panelBuscar.Visible = false;
        panelDatosAlumno.Visible = false;
        panelAltaAlumno.Visible = true;
        LimpiarAlta();
    }

    protected void grillaAlumnos_Sorting(object sender, GridViewSortEventArgs e)
    {
        ViewState["Orden"] = e.SortExpression;
        /* string o = ViewState["Orden"].ToString(); */
        Buscar();
    }

    protected void grillaAlumnos_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grillaAlumnos.PageIndex = e.NewPageIndex;
        Buscar();
    }

    private void CargarTiposDocumento()
    {
        List<TipoDocumento> tiposDoc = TipoDocumentoDAO.ObtenerTodos();
        ddlTipoDocAlta.DataSource = tiposDoc;
        ddlTipoDocAlta.DataTextField = "Descripcion";
        ddlTipoDocAlta.DataValueField = "IdTipoDocumento";
        ddlTipoDocAlta.DataBind();
        ddlTipoDocAlta.Items.Insert(0, new ListItem("--seleccionar--", "0"));
    }

    protected void btnVolver_Click(object sender, EventArgs e)
    {
        panelAltaAlumno.Visible = false;
        panelBuscar.Visible = true;
    }

    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        if (IsValid)
        {
            // Obtener los datos de los controles para crear instancia de alumno
            string nombre = txtNombreAlta.Text.Trim();
            string apellido = txtApellidoAlta.Text.Trim();
            int idTipoDocumento = int.Parse(ddlTipoDocAlta.SelectedValue.ToString());
            TipoDocumento tipoDoc = TipoDocumentoDAO.ObtenerPorId(idTipoDocumento);
            string numeroDocumento = txtNroDocAlta.Text.Trim();
            string telefono = txtTelAlta.Text.Trim();

            Alumno alumno = null;
            int id = ObtenerIdModificar();
            if (id > 0)   // Si hay una modificación (UPDATE)
            {
                int legajo = int.Parse(txtLegajoAlta.Text);
                DateTime fecha = DateTime.Parse(txtFechaInscAlta.Text);
                alumno = new Alumno(id, legajo, nombre, apellido, numeroDocumento, tipoDoc, telefono, fecha);

                // Verifico si hay modificaciones en tipo documento y numero documento para evitar error de unique key cuando no se modifican estos valores
                if (ViewState["Alumno"] != null)
                {
                    Alumno aluAux = (Alumno)ViewState["Alumno"];
                    if (aluAux.TipoDocumento.IdTipoDocumento == alumno.TipoDocumento.IdTipoDocumento)
                    {
                        alumno.TipoDocumento = null;
                    }

                    if (aluAux.NumeroDocumento.Equals(alumno.NumeroDocumento))
                    {
                        alumno.NumeroDocumento = null;
                    }
                }
            }
            else  // Si hay un nuevo registro (INSERT)
            {
                alumno = new Alumno(nombre, apellido, numeroDocumento, tipoDoc, telefono, DateTime.Today);
            }

            try
            {
                AlumnoDAO.Grabar(alumno);
                panelBuscar.Visible = true;
                CargarGrilla(null);
                lblResultadoBus.Text = "Alumno inscripto correctamente";
                if (id > 0)
                {
                    lblResultadoBus.Text = "Alumno actualizado correctamente";
                }              
                panelAltaAlumno.Visible = false;
                LimpiarAlta();
            }
            catch (Exception ex)
            {
                lblResAlta.Text = ex.Message;
                lblResAlta.ForeColor = System.Drawing.Color.Red;
            }
        }
    }

    protected void grillaAlumnos_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            int idAlumno = int.Parse(grillaAlumnos.SelectedDataKey.Value.ToString());
            Alumno alumno = AlumnoDAO.ObtenerPorId(idAlumno);

            if (alumno != null)
            {
                panelAltaAlumno.Visible = true;
                panelBuscar.Visible = false;
                CargarDatosAlumno(alumno);
            }
        }
        catch (Exception ex)
        {
            lblResultadoMostrar.ForeColor = System.Drawing.Color.Red;
            lblResultadoMostrar.Text = ex.Message;
        }
    }

    private void CargarDatosAlumno(Alumno alumno)
    {
        ViewState["Alumno"] = alumno;
        txtLegajoAlta.Text = alumno.Legajo.ToString();
        txtApellidoAlta.Text = alumno.Apellido;
        txtNombreAlta.Text = alumno.Nombre;
        ddlTipoDocAlta.SelectedValue = alumno.TipoDocumento.IdTipoDocumento.ToString();
        txtNroDocAlta.Text = alumno.NumeroDocumento;
        txtTelAlta.Text = alumno.Telefono;
        txtFechaInscAlta.Text = alumno.FechaInscripcion.ToString("dd/MM/yyyy");

        btnEliminar.OnClientClick =  string.Format("return confirm('¿Desea eliminar al alumno {1}, {0}?')", alumno.Nombre, alumno.Apellido);
    }

    private int ObtenerIdModificar() 
    {
        int id = 0;
        string campo = "Alumno";
        if (ViewState[campo] != null)
        {
            id = ((Alumno)ViewState[campo]).IdAlumno;
        }
        return id;
    }

    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        if (ViewState["Alumno"] != null)
        {
            int idAlumno = ObtenerIdModificar();

            try
            {
                AlumnoDAO.Eliminar(idAlumno);
                panelAltaAlumno.Visible = false;
                panelBuscar.Visible = true;
                lblResultadoMostrar.Text = "Alumno eliminado correctamente";
                lblResultadoMostrar.ForeColor = System.Drawing.Color.Green;
                CargarGrilla(null);
                LimpiarAlta();
            }
            catch (Exception ex)
            {
                lblResultadoMostrar.Text = ex.Message;
                lblResultadoMostrar.ForeColor = System.Drawing.Color.Red;
            }
        }
    }
    protected void btnCerrarSesion_Click(object sender, EventArgs e)
    {
        ////Eliminar la cookie
        //Context.Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now;
        ////Terminar la Sesion
        //FormsAuthentication.SignOut();
        //Response.Redirect("~/Publico/InicioWF.aspx");

        //************************************************************
        //Otra forma de eliminar la cookie del equipo del usuario
        if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
        {
            HttpCookie paraBorrar = new HttpCookie(FormsAuthentication.FormsCookieName);
            paraBorrar.Expires = DateTime.Now.AddDays(-1d);
            Response.Cookies.Add(paraBorrar);
        }
        FormsAuthentication.SignOut();
        Session.Abandon();
        Response.Redirect("~/Publico/InicioWF.aspx");
    }
}